/**
 * 处理离开页面的情况（如离开页面时显示确认弹窗）
 */
import services from '@/services'

/**
 * 禁用确认弹窗
 */
let disabled = false
export function disableLeaveConfirm() {
  disabled = true
}

/**
 * 确保不带“离开确认”刷新页面
 */
export function silentReload(reason: string) {
  void services.netlog.send('reload', reason)
  disableLeaveConfirm()
  location.reload()
}

export function useLeaveConfirm() {
  useEffect(() => {
    function callback(event: BeforeUnloadEvent) {
      // 记录日志
      void services.netlog.send('leave-app', {
        url: location.href,
      })

      // SCRM 环境下离开页面要重置 mask 状态
      services.scrm.send('mask-status', false)

      // 在 SCRM 里固定不显示确认弹窗
      if (disabled || services.scrm.inSCRM) return
      event.preventDefault()
      event.returnValue = ''
    }
    window.addEventListener('beforeunload', callback, { capture: true })
    return () => {
      window.removeEventListener('beforeunload', callback, { capture: true })
    }
  }, [])
}
